package org.zyj.io.example.case8;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ReplayingDecoder;

import java.util.List;

/**
 * 泛型表示用户状态管理类型, Void代表不需要状态管理
 * ---
 * 局限性:
 * 1. 并不是所有ByteBuf操作都支持, 如果调用一个不被支持的方法, 将会抛出一个UnsupportedOperationException
 * 2. ReplayingDecoder在某些情况下可能稍微慢于ByteToMessageDecoder, 例如网络缓慢并且消息格式复杂时, 消息会被拆成了多个碎片 ,速度变慢
 */
class ByteToLongDecoder2 extends ReplayingDecoder<Void> {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        System.out.println("ByteToLongDecoder2 被调用");
//        if (in.readableBytes() >= 8) {
        out.add(in.readLong()); //ReplayingDecoder 不需要判断数据是否足够读取, 内部会进行处理判断
//        }
    }
}
